package com.atguigu.yygh.hosp.controller;

import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.common.utils .MD5;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import com.atguigu.yygh.vo.hosp.HospitalSetQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import  com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.Random;

/**
 * @author jpt
 * @create 2022 - 03 - 10 11:59
 */
@Api(tags = "医院设置管理")
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
@Log
public class  HospitalSetController {
    @Autowired
    private HospitalSetService hospitalSetService;

    //查询医院所有记录
    @ApiOperation(value = "获取所有医院设置")
    @GetMapping("findAll")
    public Result findAllHospital(){
        List<HospitalSet> list = hospitalSetService.list();

        return Result.ok(list);
    }

    //逻辑删除医院
    @ApiOperation(value = "逻辑删除医院设置")
    @DeleteMapping("{id}")
    public Result removeHospSet(@PathVariable Long id){
        boolean flag = hospitalSetService.removeById(id);
        if (flag){
            return Result.ok();
        }else {
            return Result.fail();
        }
    }

    //条件查询带分页 current表示当前页，hosp对象使用封装的vo对象进行查询
    @PostMapping("findPageHospSet/{current}/{limit}")
    @ApiOperation("分页查询接口")
    public Result findPageHospSet(@PathVariable long current,
                                  @PathVariable long limit,
                                  @RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo){



        //////////////////
        Page<HospitalSet> page = new Page<>(current, limit);
        //使用mp中条件构造器，构建查询条件
        QueryWrapper<HospitalSet> wrapperr = new QueryWrapper<>();
        //判断下查询条件为空的情况
        String hosname = hospitalSetQueryVo.getHosname();// 医院名称
        String hoscode = hospitalSetQueryVo.getHoscode();//  医院编号
        if(!StringUtils.isEmpty(hosname)){
            wrapperr.like("hosname",hospitalSetQueryVo.getHosname());
        }
        if(!StringUtils.isEmpty(hoscode)){
            wrapperr.eq("hoscode",hospitalSetQueryVo.getHoscode());
        }

//        重新封装为page对象再传回去
        Page<HospitalSet> hospitalSetPage = hospitalSetService.page(page, wrapperr);
//
        return Result.ok(hospitalSetPage);
    }




    //添加医院设置

    @PostMapping("saveHospitalSet")
    public Result saveHospital(@RequestBody HospitalSet hospitalSet){
//        设置状态1：0？使用：不使用
        hospitalSet.setStatus(1);
        //签名密钥
        Random random = new Random();
        hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis()+""+random.nextInt(1000)));
        log.info(hospitalSet.getHosname()+":密钥为"+hospitalSet.getSignKey());
        boolean save = hospitalSetService.save(hospitalSet);
        if(save){
            return  Result.ok();
        }else {
            return  Result.fail();
        }



    }



    //根据id获取医院设置
    @GetMapping("getHospitalSet/{id}")
    public Result getHospSet(@PathVariable long id){

        HospitalSet byId = hospitalSetService.getById(id);

        return Result.ok(byId);
    }




    // 修改医院设置
    @PostMapping("updateHospitalSet")
    public Result updateHospitalSet(@RequestBody HospitalSet hospitalSet){
        boolean update = hospitalSetService.updateById(hospitalSet);
        if(update){
            return  Result.ok();
        }else {
            return  Result.fail();
        }




    }

//    批量删除医院

    @DeleteMapping("batchRemove")
    public Result BatchRemove(@RequestBody   List<String> idList){
        boolean b = hospitalSetService.removeByIds(idList);
        if(b){
            return  Result.ok();
        }else {
            return  Result.fail();
        }


    }

//    医院设置的锁定和解锁

@PutMapping("lockHospitalSet/{id}/{status}")
    public Result lockHospitalSet(@PathVariable Long id,
                                  @PathVariable  Integer status){

    HospitalSet hospitalSet = hospitalSetService.getById(id);
    hospitalSet.setStatus(status);
     hospitalSetService.updateById(hospitalSet);
     return Result.ok();
}

//    发送签名秘钥
@PutMapping("sendKey/{id}")
public Result sendKey(@PathVariable Long id
                              ){

    HospitalSet hospitalSet = hospitalSetService.getById(id);
    String signKey = hospitalSet.getSignKey();
    String hoscode = hospitalSet.getHoscode();


    //TODO  调用阿里云接口发送短信


    return Result.ok();




}


}
